home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Online / SpeakFreely / src / lpc10 / difmag.c < prev    next >
C/C++ Source or Header  |  2000-05-18  |  1KB  |  49 lines

  1. /***********************************************************************
  2. *
  3. *    DIFMAG Version 49
  4. *
  5. **********************************************************************
  6. *
  7. *  Compute Average Magnitude Difference Function
  8. *
  9. * Inputs:
  10. *  SPEECH - Low pass filtered speech
  11. *  LPITA  - Length of speech buffer
  12. *  TAU    - Table of lags
  13. *  LTAU   - Number of lag values to compute
  14. *  MAXLAG - Maximum possible lag value
  15. * Outputs:
  16. *  AMDF   - Average Magnitude Difference for each lag in TAU
  17. *  MINPTR - Index of minimum AMDF value
  18. *  MAXPTR - Index of maximum AMDF value
  19. */
  20.  
  21. #include <math.h>
  22. #include "lpcdefs.h"
  23.  
  24. difmag( speech, tau, ltau, maxlag, amdf, minptr, maxptr )
  25. int maxlag, *minptr, *maxptr, ltau;
  26. int tau[];
  27. float speech[], amdf[];
  28. {
  29. int i, j, n1, n2;
  30. float sum;
  31.  
  32. *minptr = 1;
  33. *maxptr = 1;
  34. for(i=1;i<=ltau;i++)    {
  35.     n1 = (maxlag-tau[i]) *0.5 + 1;
  36.     n2 = n1 + MAXWIN - 1;
  37.     sum = 0.;
  38.     for(j=n1;j<=n2;j+=4)    {
  39.         sum += (float)fabs((double) (speech[j] - speech[j+tau[i]]) );
  40.     }
  41.     amdf[i] = sum;
  42.     if( amdf[i] < amdf[*minptr]) 
  43.         *minptr = i;
  44.     if( amdf[i] > amdf[*maxptr])
  45.         *maxptr = i;
  46. }
  47.  
  48. }
  49.